
! ALLOWED TOKEN TYPES

||	TOKEN-TYPE			||	PLUGIN-USE	||	IS COLLECTED	||	DESCRIPTION												||	EXAMPLE									||
|	@number				|	expr		|	yes				|	token must be a number  								|	3 / 4.4     							|
|	@bool           	|	expr		|	yes				|	token must be a boolean 								|	true/false  							|
|	@date           	|	expr		|	yes				|	token must be a date									|	7/1/2012    							|
|	@time           	|	expr		|	yes				|	token must be a time									|	7:10 am     							|
|	@word           	|	expr		|	yes				|	token must be any word									|	name        							|
|	@identsymbol    	|	expr		|	yes				|	token must be in the symbol table						|	username    							|
|	@singlularsymbol   	|	expr		|	yes				|	token must be in the symbol table but with a suffix  's'|	if username then usernames must exist   |
|	@starttoken			|	expr		|	yes				|	token must be in the "starttoken" map in metaplugin		|	            							|
|	@tokenmap1			|	expr		|	yes				|	token must be in the "tokenmap1"  map in metaplugin		|	            							|
|	@tokenmap2			|	expr		|	yes				|	token must be in the "tokenmap2"  map in metaplugin		|	            							|
|	@exprTerminators	|	expr		|	no				|	token must be in Terminators.ExpFlexibleEnd				|               							|



! ALLOWED TOKEN PROPERTIES

||	PROPERTY NAME		||	APPLICABLE TO						||	DESCRIPTION																		||	EXAMPLE		||
|	value				|	starttoken, tokenmap1, tokenmap2	|	only applies to @starttoken, gets the value of the starttoken in the metaplugin	|	n/a		  									|
|	tvalue           	|	any token type						|	applies to any token and returns the Value property of the token as an LObject	|	@number.tvalue 		 = LNumber(2.0)			|
|	tvaluestring       	|	any token type						|	applies to any token and returns the Value property of the token as an LString	|	@number.tvaluestring = LString("2")		    |
|	ttext           	|	any token type						|	applies to any token and returns the Text property of the token as an LString	|	@word.ttext			 = LString("wordacb")   |




Name: FS.Plugins.Ext.AndOr
Desc: Allows representation of logical and/or conditions using words 'and'/'or'
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. if 1 < 2 and 3 > 4 then print 'ok'
2. var canVote = isRegistered and age >= 18



Name: FS.Plugins.Ext.Bool
Desc: Allows representation of boolean operators such as true/false in other formats such as on/off/yes/no
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. var enabled = yes
2. canVote = no
3. if canUpdate == Yes then doSomething()



Name: FS.Plugins.Ext.CollectionCheck
Desc: Allows representation of strings using words prefixed with ':' such as :user
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $start:@starttoken $varname:@identsymbol \? @exprTerminators
Examples:
1. :microsoft
2. :user1



Name: FS.Plugins.Ext.Compare
Desc: Allows representation of compare operators such as '<' and '>' using words 'more than' and 'less than'
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. if age is below 18 then print 'can not vote'
2. if temp is more than 85 then print 'its hot'



Name: FS.Plugins.Ext.DateNamed
Desc: Allows representation of dates used calendar names such as Jan 1 2012, or January 1st 2012
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $month:@starttoken.value $day:@number.tvalue $dayend:( st | nd | rd | th )? ( ','?  $year:@number.tvalue
 )? ( at $time:@time.tvaluestring )?
Examples:
1. jan 1st
2. Jan 1st
3. Jan 1
4. Jan 1 2012
5. Jan 1st 2012
6. January 1st, 2012



Name: FS.Plugins.Ext.DateRelative
Desc: Allows representation of relative dates such as 2nd monday in january
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $day:@starttoken.tvaluestring $dayend:( st | nd | rd | th )? $dayofweek:@tokenmap1.value $sep:( in | of ) $month:@tokenmap2.value
Examples:
1. 3rd Monday in January
2. 2nd Monday in February
3. Last Monday in May
4. 1st Monday in September



Name: FS.Plugins.Ext.DateTimeCombiner
Desc: Allows combining DateNumber and Time plugins. This only works with dates such as 10/2/2013 and not oct 2 2013
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram: $date:@starttoken at $time:@time
Examples:
1. 10/2/2013 at 3:30 pm
2. 10-2-2013 at 7:45 am



Name: FS.Plugins.Ext.Day
Desc: Allows representation of days using day names
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $daynumber:@starttoken.value ( at $time:@time.tvaluestring )?
Examples:
1. monday
2. Friday at 8:30 am
3. today
4. Tomorrow at 9 pm



Name: FS.Plugins.Ext.Def
Desc: Allows using the word 'def' instead of function to define functions like in python and ruby
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. def add( a, b ) { return a + b; }



Name: FS.Plugins.Ext.Money
Desc: Allows representation numbers using dollar sign $
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $prefix:$ $num:@number.tvalue
Examples:
1. $120



Name: FS.Plugins.Ext.Set
Desc: Allows using the word 'set' instead of var
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. set age = 30
2. set isActive = true



Name: FS.Plugins.Ext.Step
Desc: Allows using the word 'step' instead of function when declaring functions
Docs: http://fluentscript.codeplex.com/documentation
Type: token
IsOn: true
Gram:
Examples:
1. step add( a, b ) { return a + b; }



Name: FS.Plugins.Ext.StringLiteral
Desc: Allows representation of strings using words prefixed with ':' such as :user
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: $prefix:: $word:@word
Examples:
1. :microsoft
2. :user1



Name: FS.Plugins.Ext.Time
Desc: Allows representation of time
Docs: http://fluentscript.codeplex.com/documentation
Type: lexer
IsOn: true
Gram: ( $hour:@number $ampm:( am | pm ) ) | ( $hour:@number : $time:@timeletters.tstringvalue $ampm:( am | pm ) )
Examples:
1. 8 am
2. 8:30 am



Name: FS.Plugins.Ext.Url
Desc: Allows representation of an url starting with www
Docs: http://fluentscript.codeplex.com/documentation
Type: lexer
IsOn: false
Gram: #grammar_match $url:@urlChars.tvaluestring
Examples:
1. http://www.fluentscript.com
2. www.mycompany.com/login?user=johndoe1



Name: FS.Plugins.Ext.WithEach
Desc: Allows looping over a collection using combined with 'with' functionality to
Docs: http://fluentscript.codeplex.com/documentation
Type: expr
IsOn: true
Gram: #grammarmatch @expr.block
Examples:
1. var users = getUsers(); with each user { print ( name, age, isactive ); }




NAME			 |	 TRIGGERS		XML POSSIBLE	GRAMMAR			
Aggregate 		     "avg"      	X				@startToken ( ( '(' @expr ')' ) | ( of @expr ) )
Alias 			     "alias"    	yes				@startToken @ident to @ident
AndOr 			     "and"      	yes				@startToken <alias> -> <replacement>
Bool 			     "yes"      	yes				@startToken <alias> -> <replacement>
Compare 		     "avg"      	yes				@startToken 
ConstCaps 		     "$ident"   	X 				@startToken @identUCase '=' @expr
Date 			     "jan"      	??				@startToken @number{1,2} ( st | nd | rd | th )? ( ','? ( @number{4} ) )? @ref:time?
DateNumber 		     "$number"  	??				@startToken @number{1,2} ( '/' | '-' | '\' ) @number{1,2} ( '/' | '-' | '\' ) @number{1,4}
DateTimeCombiner     "avg"      	yes				@startToken 
Day 			     "today"    	yes				@startToken @ref:time
Def 			     "avg"      	yes				@startToken -> "function"
Enable 			     "avg"      	yes				@startToken 
Email 			     "$ident"   	??				@startToken @ident @customword1
Fail 			     "avg"      	yes				@startToken fail @expr @endofstmt
FileExt 		     "avg"      	yes				@startToken '*'? '.' @ident 
FluentFunc 		     "avg"      	X				@startToken 
FluentMember 	     "avg"      	X				@startToken 
FuncWildCard 	     "avg"      	X				@startToken 
HashComment 	     "avg"      	yes				@startToken # . <newline>
Holiday 		     "avg"      	yes				@startToken 
Linq 			     "avg"      	X				@startToken ( <id> where <expression> ) | ( from <id> in <id> where <expression> )
Log 			     "avg"      	X				@startToken log '.'? ( 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'put' ) '(' <expr> ( ',' <expr> ) ')'
MachineInfo 	     "avg"      	yes				@startToken ( (mac '.' ) | '@' ) <ident>
Marker 			     "avg"      	??				@startToken '@' ( todo | note | bug | review | implement | optimize | refactor | critical ) <line>
MarkerLex 		     "avg"      	yes				@startToken 
Money 			     "$"        	yes				@startToken  @number
NamedIndex 		     "$number"  	??				@startToken  ( 'st' | 'nd' | 'rd' | 'th' ) <ident>
Percent 		     "avg"      	yes				@startToken <numbertoken> %
Print 			     "avg"      	yes				@startToken 
PrintExpression      "avg"      	yes				@startToken 
Records 		     "avg"      	no				@startToken '[' <id> ( '|' <id> )* <newline> ( <expression> ( ( ',' | '|' ) <expression> )* <newline> )* ']'
Repeat 			     "avg"      	no				@startToken repeat ( ( <ident> = <expression> ) | <literal>)? to [symbol]? <expression> [by <expression>]? 
Round 			     "avg"      	yes				@startToken round ( up | down )? <expression>
Run 			     "avg"      	no				@startToken run function? ( <id> | <stringliteral> ) <paramlist>
Set 			     "avg"      	yes				@startToken <alias> -> <replacement>
Sort 			     "avg"      	no				@startToken sort <expression> ( in <expression> )? by <expression> ( asc | desc )?
Step 			     "avg"      	yes				@startToken <alias> -> <replacement>
StringLiteral 	     "avg"      	yes				@startToken :username
Suffix 			     "avg"      	??				@startToken <literal> <identifier>
Swap 			     "swap"     	no				@startToken @ident with @ident @endofstmt
NamedTime		     "noon"     	??				@startToken 
Time 			     "$number"  	yes				@startToken ( ':' <number> ){1,2} ( am | pm ) ) 
TypeOperations 	     "avg"      	no				@startToken typeof <expression>
Units 			     "avg"      	yes				@startToken <literal> <identifier>
Uri 			     "http"     	??				@startToken  ':' ( [a-zA-Z0-9] | [^' ' 	 '(' ')' ';' ',' '[' ']' ] )*  | ( <id> ':' '' '' ( [a-zA-Z0-9] | [^' ' 	 '(' ')' ';' ',' '[' ']' ] )* ) )
VariablePath 	     "avg"      	??				@startToken @? '\' ( ( <idtoken> | <numbertoken> | '-' | '.' )*  '\'?)
Version 		     "$number"  	??				@startToken '.' @number
Words 			     "@"        	yes				@startToken words  ( '(' <id>* ( ',' <id>* )* ')' ) | ( @ident ( ',' @ident )* @endofstmt
WordsInterpret 	     "avg"      	??				@startToken 